const online = require("../db/onlineUsers.js");

module.exports = (io, socket) => {
	socket.on("system", (sendBody) => {
		console.log("系统事件");
	});

	// 用户请求进行系统轮询事件类型
	// 事件和事件之间使用冒号分割
	socket.on("system:polling:getServerMessage", (sendBody) => {
		// socket绑定的事件集合
		let = eventList = Object.keys(io.of("/").sockets.get(socket.id)._events);
		// 获取socket中客户端的数量以及连接id
		// console.log(io.engine.clients);
		// console.log(io.engine.clientsCount);
		// 将服务器的socket接收事件收集发送给前端
		socket.emit(sendBody.sendType, {
			sendID: "system",
			receiveID: "polling",
			room: "getServerMessage",
			message: eventList,
			sendType: "system:polling:getServerMessage",
		});
	});

	// 客户端请求获取session相关信息
	socket.on("system:get:getSession", (sendBody) => {
		socket.emit(sendBody.sendType, {
			sendID: "system",
			receiveID: "get",
			room: "getSession",
			message: socket.request.session,
			sendType: "system:get:getSession",
		});
	});

	// 客户端请求将socket与账户进行绑定
	socket.on("system:bind:user", (sendBody) => {
		let message = "";
		let room;
		// 绑定行为需要确定当前用户已经登录,如果还未登录无法进行绑定
		if (socket.request.session.user) {
			try {
				room = true;
				message = "用户成功绑定socket连接!"
				// 获取当前需要绑定socket的用户id
				let _id = socket.request.session.user._id;
				// 获取当前id所保存的对象
				let updata = online.getUser(_id)
				// 更新存储的socket对象
				updata.setSocket(socket);
				// 增加或者修改socket绑定
				online.addUser(_id, updata)
			} catch (error) {
				console.log("用户绑定失败！");
				console.log(error);
			}
		} else {
			room = false;
			message = "用户还未登录无法绑定!"
		}

		// 这个是socket的发送方法，调用这个方法，后端能够主动向前端发送数据
		// 第一个参数是发送的名称，比如
		socket.emit(sendBody.sendType, {
			sendID: "system",
			receiveID: "bind",
			room,
			message,
			sendType: "system:bind:user",
		});
	});


	// 当前端发送一个叫做test事件时,触发这个事件
	socket.on("test", (sendBody) => {
		console.log("接收到了测试事件");
		console.log(sendBody);
	})

	// 查看用户列表
	socket.on("showUserList", (sendBody) => {
		console.log("用户列表");
		console.log(online.getAllUsers());
	})
}